package cn.tedu.oop;
/**本类用于抽象类的入门案例*/
public class AbstractDemo {
    public static void main(String[] args) {
//        Animal a = new Animal() ;
        Animal a = new Pig();
        a.eat();//调用抽象父类自己的普通方法
        a.fly();//调用子类实现了的抽象父类中的方法
    }
}
/**被abstract关键字修饰的类是抽象类
 * 如果一个类中包含了抽象方法，那么这个类必须被声明成一个抽象类
 */
abstract class Animal{
    public void eat(){
        System.out.println("吃啥都行");
    }
    public void play(){
        System.out.println("玩啥都行");
    }
    /**被abstract关键字修饰的方法称为抽象方法，抽象方法没有方法体*/
    public abstract void fly();
    public abstract void fly2();
}
/**当一个子类继承了抽象父类以后，有两种解决方案:
 * 方案1:变成抽象子类，子类也不实现，继续抽象
 * 方案2:变成普通子类，实现抽象父类中的所有抽象方法*/
//abstract class Pig extends Animal{
    class Pig extends Animal{
        @Override
        public void fly(){
            System.out.println("还清了1");
        }
        @Override
        public void fly2(){
            System.out.println("抽象父类中的所有抽象方法都需要被实现");
        }
}
